package com.xm.bean;

import org.springframework.context.annotation.AnnotationConfigApplicationContext;

/**
 * bean声明周期执行顺序结果
 * 执行静态方法。。
 * 1. 构造函数执行 - 实例化
 * 2. 属性注入: message = Hello Spring Lifecycle!
 * 3. BeanPostProcessor.postProcessBeforeInitialization() 执行
 * 4. @PostConstruct 方法执行
 * 5. InitializingBean.afterPropertiesSet() 执行
 * 6. 自定义 init-method 执行
 * 7. BeanPostProcessor.postProcessAfterInitialization() 执行
 * 7. Bean 使用中: Hello Spring Lifecycle!
 * 22:36:06.424 [main] DEBUG org.springframework.context.annotation.AnnotationConfigApplicationContext - Closing org.springframework.context.annotation.AnnotationConfigApplicationContext@2c9f9fb0, started on Thu Mar 06 22:36:06 CST 2025
 * 8. @PreDestroy 方法执行
 * 9. DisposableBean.destroy() 执行
 * 10. 自定义 destroy-method 执行
 */
public class MainApp {
    public static void main(String[] args) {
        // 创建 Spring 上下文
        AnnotationConfigApplicationContext context =
                new AnnotationConfigApplicationContext(AppConfig.class);

        // 获取 Bean 并调用方法
        LifecycleDemoBean bean = context.getBean(LifecycleDemoBean.class);
        bean.doWork();

        // 关闭上下文（触发销毁方法）
        context.close();

    }
}